﻿//先数组，后字符串
//1.拼接
// 使用 + 运算符
using System.Diagnostics;
using System.Text;

string greeting = "Hello, " + "World!"; // "Hello, World!"
// 使用 string.Concat
string combined = string.Concat("A", "B", "C"); // "ABC"
Console.WriteLine(greeting);
Console.WriteLine(combined);
//2.分割
string csv = "Alice,25,New York;Bob,30,London";
string[] rows = csv.Split(';'); // 按分号分割行
foreach (string row in rows)
{
    string[] columns = row.Split(','); // 按逗号分割列
    Console.WriteLine($"Name: {columns[0]}, Age: {columns[1]}, City: {columns[2]}");
}
//3.字符串替换
//场景：数据脱敏（隐藏手机号中间部分）
string phone = "13812345678";
string masked = phone.Substring(0, 3) + "****" + phone.Substring(7); // "138****5678"
Console.WriteLine(masked);
//4.字符串格式化
// 使用 string.Format
string name = "Alice";
int score = 95;
string message = string.Format("{0} 的得分是 {1} 分", name, score); // "Alice 的得分是 95 分"
Console.WriteLine(message);

// 使用插值字符串（C# 6.0+）
DateTime now = DateTime.Now;
string log = $"[{now:HH:mm:ss}] 用户登录成功"; // "[14:30:00] 用户登录成功"
Console.WriteLine(log);

// 数值格式化
double price = 99.99;
string priceStr = price.ToString("C"); // "$99.99"（货币格式）
Console.WriteLine(priceStr);
//5.字符串大小写转换
string input = "Hello World";
string upper = input.ToUpper();  // "HELLO WORLD"
string lower = input.ToLower();  // "hello world"
Console.WriteLine(upper+" "+lower);
//6.去除字符串空白
//去除两端
string userInput = "   user@example.com   ";
string trimmed = userInput.Trim(); // "user@example.com"
Console.WriteLine(trimmed);

// 去除中间空格（需替换）
string spaced = "A B C";
string cleaned = spaced.Replace(" ", ""); // "ABC"
//7.子字符串提取
string url = "https://www.example.com/path/to/page";
int start = url.IndexOf("//") + 2;  // 找到 "//" 后的位置
int end = url.IndexOf('/', start);  // 找到第一个 '/' 的位置
string domain = url.Substring(start, end - start); // "www.example.com"
Console.WriteLine(domain);

//stringbuilder
StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10000; i++)
    {
        sb.Append(i).Append(", ");
    }
    string result = sb.ToString();
    Console.WriteLine(result.Substring(0, 50) + "..."); // 输出前50字符

//不用
// string result = "";
//         for (int i = 0; i < 10000; i++)
//         {
//             result += i.ToString() + ", "; // 每次拼接生成新字符串
//         }
//         Console.WriteLine(result.Substring(0, 50) + "..."); // 输出前50字符

//2.插入删除
StringBuilder sb1 = new StringBuilder("Hello World");
    sb1.Insert(5, " C#"); // 在索引5插入
    Console.WriteLine(sb1.ToString()); // "Hello C# World"

    sb1.Remove(5, 3); // 从索引5删除3个字符
     Console.WriteLine(sb1.ToString()); // "Hello World"

    
//3.替换与清空
 StringBuilder sb2 = new StringBuilder("Hello World");
    sb2.Replace("World", "C#"); // 替换子字符串
    Console.WriteLine(sb2.ToString()); // "Hello C#"

    sb2.Clear(); // 清空内容
     Console.WriteLine(sb2.Length); // 0

//4.性能对比
int iterations = 100000;
        Stopwatch sw = new Stopwatch();

        // 使用 string
        sw.Start();
        string s = "";
        for (int i = 0; i < iterations; i++) s += i.ToString();
        sw.Stop();
        Console.WriteLine($"string: {sw.ElapsedMilliseconds} ms");

        // 使用 StringBuilder
        sw.Restart();
        StringBuilder sb3 = new StringBuilder();
        for (int i = 0; i < iterations; i++) sb3.Append(i.ToString());
        string result3 = sb3.ToString();
        sw.Stop();
        Console.WriteLine($"StringBuilder: {sw.ElapsedMilliseconds} ms");





//遍历数组
// 创建一个整数数组
        int[] numbers = { 1, 2, 3, 4, 5 };
 
        // 使用for循环遍历数组
        for (int i = 0; i < numbers.Length; i++)
        {
            Console.WriteLine(numbers[i]);
        }

//增加和删除数组
//c#中数组初始化以后是不能够直接添加新的元素的！
//所以我们增加元素的根本就是，用一个新数组去替换旧的数组
// 创建两个个整数数组
        int[] arr1 = new int[5] { 1,2,3,4,5};
        int[] arr2 = new int[6] ;
 
        // 使用for循环遍历数组
        for (int i = 0; i < arr1.Length; i++)
        {
            arr2[i] = arr1[i];
        }
        arr1 = arr2;
        arr1[5] = 3;
        for (int i = 0; i < arr1.Length; i++)
        {
            Console.WriteLine(arr1[i]);
        }

//查找元素
// 创建一个整数数组
        int[] arr11 = new int[5] { 1,2,3,4,5};
        int a =3;//创建一个目标值
 
        // 使用for循环遍历数组
        for (int i = 0; i < arr11.Length; i++)
        {
            if(arr11[i]==a)
            {
                Console.WriteLine("{0}",i);
                break;
            }
        }
//数组排序
int[] numbers1 = { 50, 20, 80, 10, 30 };
Array.Sort(numbers1); // 排序后：{ 10, 20, 30, 50, 80 }
for (int i = 0; i < numbers1.Length; i++)
{
     Console.Write(numbers1[i]);
}
Console.WriteLine();
//数组反转
int[] numbers2 = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers2); // 反转后：{ 5, 4, 3, 2, 1 }
for (int i = 0; i < numbers2.Length; i++)
{
     Console.Write(numbers2[i]);
}
Console.WriteLine();
//使用 params 关键字（可变参数）
int total = Sum(1, 2, 3, 4, 5); // 传递任意数量的参数
Console.WriteLine("总和: " + total); // 输出 15

int Sum(params int[] numbers)
{
    int sum = 0;
    foreach (int num in numbers)
    {
        sum += num;
    }
    return sum;
}




